/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package aqu.controlador.CuentasPorPagar;

import aqu.bean.generico.BeanGenerico;
import aqu.persistencia.Dao.CuentasPorPagar.CxpCabeceraretencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpDetalleRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpEstadoRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpImpuestoManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpRetencionManager;
import aqu.persistencia.Dao.CuentasPorPagar.CxpTipoDocumentoManager;
import aqu.persistencia.entity.*;
import aqu.persistencia.utilidad.MessagesController;
import com.icesoft.faces.component.ext.RowSelectorEvent;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.event.ActionEvent;

/**
 *
 * @author Verito Ramirez
 *         Victor Jaramillo
 */
@ManagedBean(name = "maestroRetencionController")
@ViewScoped
public class MaestroRetencionController extends BeanGenerico {

    private CxpCabeceraRetencion cabeceraRetecion;
    private CxpDetalleRetencion detalleRetencion;
    private CxpEstadoRetencion estadoRetencion;
    private CxpTipoDocumento tipoDocumento;
    private CxpRetencion retencion;
    private CxpImpuesto impuesto;
    
    private List<CxpCabeceraRetencion> listaCabeceraRet;
    private List<CxpDetalleRetencion> listaDetalleRet;
    private List <CxpEstadoRetencion> listaEstadoRet;
    private List<CxpTipoDocumento> listaTipoDocumento;
    private List<CxpRetencion> listaRetenciones;
    private List<CxpImpuesto> listaImpuestos;
        
    private CxpCabeceraretencionManager cxpCabeceraRetManager = new CxpCabeceraretencionManager();
    private CxpDetalleRetencionManager cxpDetalleRetManager = new CxpDetalleRetencionManager();
    private CxpEstadoRetencionManager cxpEstadoRetManager = new CxpEstadoRetencionManager();
    private CxpTipoDocumentoManager cxpTipoDocManager = new CxpTipoDocumentoManager();
    private CxpRetencionManager cxpRetencionManager = new CxpRetencionManager();
    private CxpImpuestoManager cxpImpuestoManager = new CxpImpuestoManager();
    
    private Date FecEmision;
    private Date FecVencimiento = new Date();
    boolean panelvisible;
    private int rowBanderaDetalle = -1;

    public MaestroRetencionController() {
        
        int dias = Integer.parseInt(MessagesController.obtenervariable("var_fecha_ini_default"));
        
        cabeceraRetecion =  new CxpCabeceraRetencion();
        detalleRetencion = new CxpDetalleRetencion();
        estadoRetencion = new CxpEstadoRetencion();
        tipoDocumento = new CxpTipoDocumento();
        retencion = new CxpRetencion();
        impuesto = new CxpImpuesto();
        listaCabeceraRet = cxpCabeceraRetManager.getList();

        listaEstadoRet = cxpEstadoRetManager.getList();
        listaTipoDocumento = cxpTipoDocManager.getList();
        listaRetenciones = cxpRetencionManager.getList();
        listaImpuestos = cxpImpuestoManager.getList();
        Calendar c = Calendar.getInstance();
        c.add(Calendar.DATE, -dias);
        Date date = c.getTime();
        FecEmision = date;
        
    }
    
    public boolean isPanelvisible() {
        return panelvisible;
    }

    public void setPanelvisible(boolean panelvisible) {
        this.panelvisible = panelvisible;
    }

    public void llamarPanelvisible(ActionEvent event) {
        panelvisible = !panelvisible;
    }    
    
    public Date getFecEmision() {
        return FecEmision;
    }

    public void setFecEmision(Date FecEmision) {
        this.FecEmision = FecEmision;
    }

    public Date getFecVencimiento() {
        return FecVencimiento;
    }

    public void setFecVencimiento(Date FecVencimiento) {
        this.FecVencimiento = FecVencimiento;
    }

    public CxpCabeceraRetencion getCabeceraRetecion() {
        return cabeceraRetecion;
    }

    public void setCabeceraRetecion(CxpCabeceraRetencion cabeceraRetecion) {
        this.cabeceraRetecion = cabeceraRetecion;
    }

    public CxpCabeceraretencionManager getCxpCabeceraRetManager() {
        return cxpCabeceraRetManager;
    }

    public void setCxpCabeceraRetManager(CxpCabeceraretencionManager cxpCabeceraRetManager) {
        this.cxpCabeceraRetManager = cxpCabeceraRetManager;
    }

    public CxpDetalleRetencionManager getCxpDetalleRetManager() {
        return cxpDetalleRetManager;
    }

    public void setCxpDetalleRetManager(CxpDetalleRetencionManager cxpDetalleRetManager) {
        this.cxpDetalleRetManager = cxpDetalleRetManager;
    }

    public CxpEstadoRetencionManager getCxpEstadoRetManager() {
        return cxpEstadoRetManager;
    }

    public void setCxpEstadoRetManager(CxpEstadoRetencionManager cxpEstadoRetManager) {
        this.cxpEstadoRetManager = cxpEstadoRetManager;
    }

    public CxpImpuestoManager getCxpImpuestoManager() {
        return cxpImpuestoManager;
    }

    public void setCxpImpuestoManager(CxpImpuestoManager cxpImpuestoManager) {
        this.cxpImpuestoManager = cxpImpuestoManager;
    }

    public CxpRetencionManager getCxpRetencionManager() {
        return cxpRetencionManager;
    }

    public void setCxpRetencionManager(CxpRetencionManager cxpRetencionManager) {
        this.cxpRetencionManager = cxpRetencionManager;
    }

    public CxpTipoDocumentoManager getCxpTipoDocManager() {
        return cxpTipoDocManager;
    }

    public void setCxpTipoDocManager(CxpTipoDocumentoManager cxpTipoDocManager) {
        this.cxpTipoDocManager = cxpTipoDocManager;
    }

    public CxpDetalleRetencion getDetalleRetencion() {
        return detalleRetencion;
    }

    public void setDetalleRetencion(CxpDetalleRetencion detalleRetencion) {
        this.detalleRetencion = detalleRetencion;
    }

    public List<CxpCabeceraRetencion> getListaCabeceraRet() {
        //listaCabeceraRet = cxpCabeceraRetManager.getList();
        listaCabeceraRet = cxpCabeceraRetManager.buscarporFecha(FecEmision, FecVencimiento);
        return listaCabeceraRet;
    }

    public void setListaCabeceraRet(List<CxpCabeceraRetencion> listaCabeceraRet) {
        this.listaCabeceraRet = listaCabeceraRet;
    }

    public List<CxpDetalleRetencion> getListaDetalleRet() {
        return listaDetalleRet;
    }

    public void setListaDetalleRet(List<CxpDetalleRetencion> listaDetalleRet) {
        this.listaDetalleRet = listaDetalleRet;
    }


    public List<CxpEstadoRetencion> getListaEstadoRet() {
        return listaEstadoRet;
    }

    public void setListaEstadoRet(List<CxpEstadoRetencion> listaEstadoRet) {
        this.listaEstadoRet = listaEstadoRet;
    }

    public List<CxpImpuesto> getListaImpuestos() {
        return listaImpuestos;
    }

    public void setListaImpuestos(List<CxpImpuesto> listaImpuestos) {
        this.listaImpuestos = listaImpuestos;
    }

    public List<CxpRetencion> getListaRetenciones() {
        return listaRetenciones;
    }

    public void setListaRetenciones(List<CxpRetencion> listaRetenciones) {
        this.listaRetenciones = listaRetenciones;
    }

    public List<CxpTipoDocumento> getListaTipoDocumento() {
        return listaTipoDocumento;
    }

    public void setListaTipoDocumento(List<CxpTipoDocumento> listaTipoDocumento) {
        this.listaTipoDocumento = listaTipoDocumento;
    }

    public CxpEstadoRetencion getEstadoRetencion() {
        return estadoRetencion;
    }

    public void setEstadoRetencion(CxpEstadoRetencion estadoRetencion) {
        this.estadoRetencion = estadoRetencion;
    }

    public CxpImpuesto getImpuesto() {
        return impuesto;
    }

    public void setImpuesto(CxpImpuesto impuesto) {
        this.impuesto = impuesto;
    }

    public CxpRetencion getRetencion() {
        return retencion;
    }

    public void setRetencion(CxpRetencion retencion) {
        this.retencion = retencion;
    }

    public CxpTipoDocumento getTipoDocumento() {
        return tipoDocumento;
    }

    public void setTipoDocumento(CxpTipoDocumento tipoDocumento) {
        this.tipoDocumento = tipoDocumento;
    }

    public void nuevaCabeceraRet(ActionEvent actionEvent) {
        cabeceraRetecion.setCxpFechaEmisionCabret(FecVencimiento);         
        detalleRetencion = new CxpDetalleRetencion();
    }

    public String eliminarCabeceraRet() {
        try {
            cabeceraRetecion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetecion.setCxpCodigoTipDoc(tipoDocumento);
            CxpCabeceraRetencion cabeceraRetencionTemp = (CxpCabeceraRetencion) (cabeceraRetecion);
            if (cxpRetencionManager.delete(cabeceraRetencionTemp) == false) {
                llamarPanelvisible(null);

            }
            cabeceraRetecion= new CxpCabeceraRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
        return "index";
    }          
    
    public void insertarCabeceraRet(ActionEvent actionEvent) {
        try {
            
            cabeceraRetecion.setCxpCodigoCabret(MessagesController.obtenerkeyautomatico("cxp_cabeceraretencion", "CXP_CODIGO_CABRET"));
            cabeceraRetecion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetecion.setCxpCodigoTipDoc(tipoDocumento);    
            if (cxpCabeceraRetManager.create(cabeceraRetecion) == false) {
                llamarPanelvisible(null);                
            }
            cabeceraRetecion = new CxpCabeceraRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }

    public void modificarCabeceraRet(ActionEvent actionEvent) {
        try {
            cabeceraRetecion.setCxpCodigoEstRet(estadoRetencion);
            cabeceraRetecion.setCxpCodigoTipDoc(tipoDocumento);
            if (cxpCabeceraRetManager.update(cabeceraRetecion) == false) {
                llamarPanelvisible(null);
            }
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }
    }
    
     public void nuevoDetalleRet(ActionEvent actionEvent) {
        detalleRetencion= new CxpDetalleRetencion();
    }

    public String eliminarDetalleRet() {
        try {
          
            CxpDetalleRetencion retencionTemp = (CxpDetalleRetencion) (detalleRetencion);

            if (cxpDetalleRetManager.delete(retencionTemp) == false) {
                llamarPanelvisible(null);
            }
            listaDetalleRet=cxpDetalleRetManager.buscarporcabecera(cabeceraRetecion);
            detalleRetencion = new CxpDetalleRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

        return "index";

    }

    public void insertarDetalleRet(ActionEvent actionEvent) {
        try {
            detalleRetencion.setCxpCodigoDetRet(MessagesController.obtenerkeyautomatico("cxp_detalleretencion","CXP_CODIGO_DETRET"));
            detalleRetencion.setCxpCodigoCabRet(cabeceraRetecion);
            detalleRetencion.setCxpCodigoRet(retencion);
            detalleRetencion.setCxpCodigoImp(impuesto);
            
            if (cxpDetalleRetManager.create(detalleRetencion) == false) {
                llamarPanelvisible(null);
            }
            listaDetalleRet=cxpDetalleRetManager.buscarporcabecera(cabeceraRetecion);
            detalleRetencion = new CxpDetalleRetencion();
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }

    }

    public void modificarDetalleRet(ActionEvent actionEvent) {
        try {
           detalleRetencion.setCxpCodigoCabRet(cabeceraRetecion);
           detalleRetencion.setCxpCodigoRet(retencion);
           detalleRetencion.setCxpCodigoImp(impuesto);
           
           if (cxpDetalleRetManager.update(detalleRetencion) == false) {
                llamarPanelvisible(null);
            }
           
        } catch (Exception e) {
            MessagesController.addInfo("Mensaje de error :", e.getMessage());
            llamarPanelvisible(null);
        }


    }

    
    public void switchEstadoCabRet(CxpCabeceraRetencion cabeceraRet){
        estadoRetencion = cabeceraRet.getCxpCodigoEstRet();
    }
    
    public void switchTipoDocumento(CxpCabeceraRetencion cabeceraRet){
        tipoDocumento = cabeceraRet.getCxpCodigoTipDoc();
    }
    
    public void switchRetencion(CxpDetalleRetencion detalleRet){
        retencion = detalleRet.getCxpCodigoRet();        
    }
    
    public void switchImpuesto(CxpDetalleRetencion detalleRet){
        impuesto = detalleRet.getCxpCodigoImp();
    }
    
    public void rowSelectionListenerCabRet(RowSelectorEvent event) {
                
        cabeceraRetecion = listaCabeceraRet.get(event.getRow());
        listaDetalleRet=cxpDetalleRetManager.buscarporcabecera(cabeceraRetecion);
        switchEstadoCabRet(cabeceraRetecion);
        switchTipoDocumento(cabeceraRetecion);        
    }
    
    public void rowSelectionListenerDetalle(RowSelectorEvent event){
        rowBanderaDetalle = event.getRow();
        detalleRetencion = listaDetalleRet.get(event.getRow());
        switchImpuesto(detalleRetencion);
        switchRetencion(detalleRetencion);        
    }
}
